package ar.edu.utn.frba.disenio.aerolineas;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import com.lanchita.AerolineaLanchita;
import ar.edu.utn.frba.disenio.Asiento;
import ar.edu.utn.frba.disenio.Busqueda;
import ar.edu.utn.frba.disenio.Usuario;

public class ALanchita implements Aerolinea {

	private AerolineaLanchita lanchita;
	
	public ALanchita() {
		super();
		lanchita = AerolineaLanchita.getInstance();
	}

	@Override
	public List<Asiento> asientosDisponibles(Usuario usuario, Busqueda busqueda) {
		DateTimeFormatter timeFormat = DateTimeFormat.forPattern("H:m:s");
		DateTimeFormatter dateFormat = DateTimeFormat.forPattern("YMd");
		
		String horaDeSalida = busqueda.getHoraSalida().toString(timeFormat);
		String horaDeLlegada = busqueda.getHoraLlegada().toString(timeFormat);
		String fechaDeSalida = busqueda.getFechaSalida().toString(dateFormat);
		String fechaDeLlegada = busqueda.getFechaLlegada().toString(dateFormat);
		
		String[][] asientosArray = lanchita.asientosDisponibles(busqueda.getOrigen(),fechaDeSalida,horaDeSalida,busqueda.getDestino(),fechaDeLlegada,horaDeLlegada);
		List<Asiento> asientos = new ArrayList<Asiento>();
		
		for (String[] asientoArray : asientosArray)
		{
			Asiento asiento = new Asiento();
			asiento.setAerolinea(this);
			asiento.setCodigo(asientoArray[0]);
			asiento.setPrecio(new BigDecimal(asientoArray[1]),this.getPorcentajeImpuestos(),usuario.getAdicionalPorTipo());
			asiento.setClase(asientoArray[2]);
			asiento.setUbicacion(asientoArray[3]);
			asiento.setEstado(asientoArray[4]);
			
			if (usuario.puedeComprar(asiento) && asiento.getClase().equals(busqueda.getClase()) && (busqueda.getUbicacion() == null ? true : asiento.getUbicacion().equals(busqueda.getUbicacion())))
				asientos.add(asiento);
		}
		
		return asientos;
	}

	@Override
	public void comprarAsiento(Asiento asiento) {
		this.lanchita.comprar(asiento.getCodigo());
	}

	@Override
	public BigDecimal getPorcentajeImpuestos() {
		return new BigDecimal(0.15);
	}

}
